package kr.co.bettersoft.waitnumberstoret.fragment;

import java.util.ArrayList;
import java.util.List;

import kr.co.bettersoft.waitnumberstoret.activity.R;
import kr.co.bettersoft.waitnumberstoret.common.CommonConstant;
import kr.co.bettersoft.waitnumberstoret.common.WaitnumberStoreMRest;
import kr.co.bettersoft.waitnumberstoret.domain.WaitingNumberStore;
import kr.co.bettersoft.waitnumberstoret.domain.WaitingUser;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;

public class RegisterWaitFragment extends Fragment{

	///////////////////////////////////////////////////////////////////////////////////////////////
	// 변수

	// 상수
	String TAG = "RegisterWaitFragment";
	int runMode = 1;				// 실행 모드.  1=홈. 2=이름 등록. 3=전번 등록 , 4= qr 등록
//	int numberPickerMinValue = CommonConstant.numberPickerMinValue;		// 총인원 선택 최소 인원
//	int numberPickerMaxValue = CommonConstant.numberPickerMaxValue;		// 총인원 선택 최대 인원

	public final int SELECT_DUPLICATION_USER = 301;				// 중복 체크	
	public final int GET_WAIT_LIST = 302;				//  대기 목록을 가져온다.	
	public final int REG_USER = 303;				// 대기등록 통합
	
	public final int GET_WAIT_PERSON_NUMBER = 305;				// 최초 실행. 현재 대기중인 팀 수를 가져온다.	
	
	// 폰트
	private Typeface typefaceNanumGothic= null; 
	private Typeface typefaceNanumGothicBold = null;
	
	
	// 프래그먼트 종료 여부. 종료된 경우 스레드 호출로 인한 에러를 방지하기 위함
	Boolean isFinished = false;

	// 서버 통신용
	String resultStr = "";
	WaitnumberStoreMRest waitnumberStoreMRest;
	String callResult = "";
	String tempstr = "";
	JSONObject jsonObject;
	
	// 화면 구성
	View homeLayout1, homeLayout2, homeLayout3, homeLayout4;		// 홈 레이아웃. 홈화면 1,2,3,4   1:메인, 2:이름, 3:전번, 4:QR 
	TextView home1RegisterWaitTitle;		// 상단 타이틀바의 내용.
	
	// 홈 화면 1.  이름 대기등록 / 전번 대기등록 / QR 대기등록 버튼
	TextView nowWaitingPersonNum;		// 현재 대기 인원
	Button  mainHome1RegisterByName, mainHome1RegisterByPhonenumber, mainHome1RegsterByQR;			// 이름 대기등록 / 전번 대기등록 / QR 대기등록 버튼
	// 홈 화면 2.  이름으로 대기등록 화면
	EditText mainHome2UserName;		// 이름 입력
	Button mainHome2ConfirmBtn, mainHome2CancelBtn;		// 하단 확인/취소 버튼
	// 홈 화면 3.  전번으로 대기등록 화면
	EditText mainHome3UserPhonenumber;		// 전번 입력
	Button mainHome3ConfirmBtn, mainHome3CancelBtn;		// 하단 확인/취소 버튼
	// 홈 화면 4. QR 코드로 대기등록 화면
	Button mainHome4qrScanBtn;				// QR스캔 버튼
	Button mainHome4ConfirmBtn, mainHome4CancelBtn;		// 하단 확인/취소 버튼
	
	// number picker 
//	NumberPicker np2, np3, np4;			// number picker 는 api 11 (3.0) 이후부터 사용 가능.
	// number input
	TextView total_person_number2, total_person_number3, total_person_number4; 
	EditText personNumber2, personNumber3, personNumber4;
	
	ProgressBar pb1;		// 중단 로딩 진행바
	// 키보드 자동 숨기기 위한 부모 레이아웃(리스너 달아서 키보드 숨김)과 입력 매니저
	View parentLayout;
	InputMethodManager imm;		// 키보드 제어
								
	// 공용 프립스	
	SharedPreferences sharedPrefCustom;	

	// 전달받은 가맹점 정보
	static String merchantId = "";		
	static String countryCode;
	static String languageCode;
	
	// 대기 팀수
	String waitPersonNumber = "";
	
	// 유저 정보 
	String userID = "";				//QR 스캔한 유저 아이디
	String inputText="";
	String totalCount;
	
	// 대기인원 리스트
	public ArrayList<WaitingUser> entries1 = new ArrayList<WaitingUser>();
	List<WaitingUser> entriesFn = new ArrayList<WaitingUser>();		

	int max = 0;		// 리스트 개수
	
	// 유저 정보 
	String nextIdWaitingUsers = "";


	/////////////////////////////////////////////////////////////////////////////////////////////////////
	// 핸들러
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg){
			Bundle b = msg.getData();
			try{
				if(b.getInt("showWaitNum")==1){		// 대기인원 세팅
					nowWaitingPersonNum.setText(waitPersonNumber);	
				}
				if(b.getInt("goHomeMain")==1){		// 홈1 로
					hideKeyboard();
					home1RegisterWaitTitle.setText(getActivity().getString(R.string.tab_home));
					homeLayout1.setVisibility(View.VISIBLE);
					homeLayout2.setVisibility(View.GONE);
					homeLayout3.setVisibility(View.GONE);
					homeLayout4.setVisibility(View.GONE);
					mainHome2UserName.setVisibility(View.GONE);		// 함께 사라지지 않기 때문에 별도 처리
					mainHome3UserPhonenumber.setVisibility(View.GONE);		// 함께 사라지지 않기 때문에 별도 처리
				}
				if(b.getInt("init")==1){		//닫기 및 성공시 호출함::  적립용. 마일리지 값, 소비용 마일리지 값. 스캔한 아이디. 초기화 (아이디 값을 통해 진행 여부 체크하기 때문)
					mainHome2UserName.setText("");					// 소비 화면. 고객 마일리지
					mainHome3UserPhonenumber.setText("");					// 소비 화면. 소비 금액
					userID = "";									// 스캔한 고객 아이디 
					inputText = "";		// *** 
					mainHome4qrScanBtn.setText(getString(R.string.qr_code_scan));	// qr code scan 문구 원복
					
//					np2.setValue(1);
//					np3.setValue(1);
//					np4.setValue(1);
					personNumber2.setText("1");
					personNumber3.setText("1");
					personNumber4.setText("1");
					
				}
				if(b.getInt("setInputTextToScanButton")==1){			// 버튼에 qr 코드 보여주기
					mainHome4qrScanBtn.setText(inputText);
				}
				if(b.getInt("showAlert")==1){					 // 경고창 . 
					//
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant.alertTitle)							
					.setMessage(b.getString("msg"))
					.setIcon(R.drawable.ic_dialog_img)		 
					.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int whichButton) {
							// 그냥 사용자 확인 용이기 때문에 추가 조작 없음.
						}})
						.setNegativeButton("", null).show();
				}else if(b.getInt("showAlert")==9){				// 확인후 닫기
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant.alertTitle)							
					.setMessage(b.getString("msg"))
					.setIcon(R.drawable.ic_dialog_img)		 
					.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int whichButton) {
							goHomeMain();	// 화면 초기화
							init();			// 이전값 초기화.
							// +대기등록한 인원 다시 조회해서 갱신해준다.
							handler.sendEmptyMessage(GET_WAIT_PERSON_NUMBER);
						}})
						.setNegativeButton("", null).show();
				}

				// 사용자의 확인을 받고 대기를 등록한다.
				if(b.getInt("showConfirm")==2){						// 확인창. 이름으로 대기 등록 전에 확인 받기
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant.alertTitle)				
					.setMessage(b.getString("msg"))
					.setIcon(R.drawable.ic_dialog_img)
					.setCancelable(true)
					.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int id) {
							handler.sendEmptyMessage(SELECT_DUPLICATION_USER);
						}
					})
					.setNegativeButton(android.R.string.no, null)		 
					.show();
				}

				if(b.getInt("order")==1){
					// 러닝바 실행
					pb1.setVisibility(View.VISIBLE);
				}else if(b.getInt("order")==2){
					// 러닝바 종료
					pb1.setVisibility(View.INVISIBLE);
				}
				
				switch (msg.what)
				{
				case GET_WAIT_PERSON_NUMBER : 
					if(getActivity()!=null) {
						getActivity().runOnUiThread(new RunnableGetWaitPersonNumber());
					}
					break;
					case SELECT_DUPLICATION_USER : 
						if(getActivity()!=null) {
//							threadSelectDuplicationUser();
							getActivity().runOnUiThread(new RunnableSelectDuplicationUser());
						}
						break;
					case GET_WAIT_LIST : 
						if(getActivity()!=null) {
							getActivity().runOnUiThread(new RunnableGetWaitList());
						}
						break;
					case REG_USER : 
						if(getActivity()!=null) {
							getActivity().runOnUiThread(new RunnableRegUser());
						}
						break;
					default : 
						break;
				}

				
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	};

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
	{
		View view = inflater.inflate(R.layout.fragment_register_wait, null);
		
		// 서버 통신용 클래스
		waitnumberStoreMRest = new WaitnumberStoreMRest();

		// 가맹점 아이디를 꺼낸다.
		sharedPrefCustom = getActivity().getSharedPreferences(CommonConstant.prefName,
				Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
		merchantId = sharedPrefCustom.getString("merchantId", "");

		// 레이아웃.
		homeLayout1 = view.findViewById(R.id.main_home_select_reg_type_layout1);
		homeLayout2 = view.findViewById(R.id.main_home_select_reg_type_layout2);
		homeLayout3 = view.findViewById(R.id.main_home_select_reg_type_layout3);
		homeLayout4 = view.findViewById(R.id.main_home_select_reg_type_layout4);

		// 타이틀. 대기 인원
		home1RegisterWaitTitle = (TextView) view.findViewById(R.id.home_1_register_wait_title);
		home1RegisterWaitTitle.setText(getActivity().getString(R.string.tab_home));
		nowWaitingPersonNum = (TextView) view.findViewById(R.id.now_waiting_person_num);
//		nowWaitingPersonNum.setText(getActivity().getString(R.string.tab_home));
		
		
		// 홈1 화면 -- 이름 대기등록 / 전번 대기등록 / QR 대기등록 버튼
		mainHome1RegisterByName = (Button) view.findViewById(R.id.main_home1_register_by_name);
		mainHome1RegisterByPhonenumber = (Button) view.findViewById(R.id.main_home1_register_by_phonenumber);
		mainHome1RegsterByQR = (Button) view.findViewById(R.id.main_home1_regster_by_qr);
		// 홈2 화면 -- // 이름 입력, 하단 확인/취소 버튼
		mainHome2UserName = (EditText) view.findViewById(R.id.main_home2_user_name);
		mainHome2ConfirmBtn = (Button) view.findViewById(R.id.main_home2_confirm_btn);
		mainHome2CancelBtn = (Button) view.findViewById(R.id.main_home2_cancel_btn);
		// 홈3 화면 -- // 전번  입력, 하단 확인/취소 버튼
		mainHome3UserPhonenumber = (EditText) view.findViewById(R.id.main_home3_user_phonenumber);
		mainHome3ConfirmBtn = (Button) view.findViewById(R.id.main_home3_confirm_btn);
		mainHome3CancelBtn = (Button) view.findViewById(R.id.main_home3_cancel_btn);

		// 홈4 화면 -- // QR 스캔버튼, 하단 확인/취소 버튼
		mainHome4qrScanBtn = (Button) view.findViewById(R.id.main_home4_qr_scan_btn);
		mainHome4ConfirmBtn = (Button) view.findViewById(R.id.main_home4_confirm_btn);
		mainHome4CancelBtn = (Button) view.findViewById(R.id.main_home4_cancel_btn);
		
		// person number
		total_person_number2 = (TextView) view.findViewById(R.id.total_person_number2);
		total_person_number3 = (TextView) view.findViewById(R.id.total_person_number3);
		total_person_number4 = (TextView) view.findViewById(R.id.total_person_number4);
		personNumber2 = (EditText) view.findViewById(R.id.person_number2);
		personNumber3 = (EditText) view.findViewById(R.id.person_number3);
		personNumber4 = (EditText) view.findViewById(R.id.person_number4);
		
		
		// 폰트 지정.
	    typefaceNanumGothic = Typeface.createFromAsset(getActivity().getAssets(), CommonConstant.NanumGothic);  
	    typefaceNanumGothicBold = Typeface.createFromAsset(getActivity().getAssets(), CommonConstant.NanumGothicBold);
	    // 폰트 적용
	    home1RegisterWaitTitle.setTypeface(typefaceNanumGothic);				
	    nowWaitingPersonNum.setTypeface(typefaceNanumGothic);	
		mainHome1RegisterByName.setTypeface(typefaceNanumGothicBold);		 
		mainHome1RegisterByPhonenumber.setTypeface(typefaceNanumGothicBold);		 
		mainHome1RegsterByQR.setTypeface(typefaceNanumGothicBold);		
		total_person_number2.setTypeface(typefaceNanumGothicBold);	
		total_person_number3.setTypeface(typefaceNanumGothicBold);	
		total_person_number4.setTypeface(typefaceNanumGothicBold);	
	    mainHome2ConfirmBtn.setTypeface(typefaceNanumGothicBold);		 
	    mainHome2CancelBtn.setTypeface(typefaceNanumGothicBold);		 
	    mainHome3ConfirmBtn.setTypeface(typefaceNanumGothicBold);		 
	    mainHome3CancelBtn.setTypeface(typefaceNanumGothicBold);		 
	    mainHome4qrScanBtn.setTypeface(typefaceNanumGothicBold);		 
	    mainHome4ConfirmBtn.setTypeface(typefaceNanumGothicBold);		 
	    mainHome4CancelBtn.setTypeface(typefaceNanumGothicBold);		 
	    
		
		pb1=(ProgressBar) view.findViewById(R.id.main_home_select_reg_type_progressbar);	
		
		// 홈1화면 이름 등록 버튼 리스너
		mainHome1RegisterByName.setOnClickListener(new OnClickListener() {		// 홈1. 이름 등록 버튼 
			@Override
			public void onClick(View v) {
				Log.d(TAG,"mainHome1RegisterByName click");
				runMode = 2;		// 이름 대기등록 모드
				home1RegisterWaitTitle.setText(getActivity().getString(R.string.register_by_name));	
				homeLayout1.setVisibility(View.GONE);
				homeLayout2.setVisibility(View.VISIBLE);
				mainHome2UserName.setVisibility(View.VISIBLE);
			}
		});
		// 홈1화면  전번 등록 버튼 리스너
		mainHome1RegisterByPhonenumber.setOnClickListener(new OnClickListener() {		// 홈1. 전번 등록 버튼
			@Override
			public void onClick(View v) {
				Log.d(TAG,"mainHome1RegisterByPhonenumber click");
				runMode = 3;		// 전번 대기등록 모드
				home1RegisterWaitTitle.setText(getActivity().getString(R.string.register_by_phone_number)); 
				homeLayout1.setVisibility(View.GONE);
				homeLayout3.setVisibility(View.VISIBLE);
				mainHome3UserPhonenumber.setVisibility(View.VISIBLE);
			}
		});
		// 홈1화면  QR 등록 버튼 리스너
		mainHome1RegsterByQR.setOnClickListener(new OnClickListener() {		// 홈1. QR 등록 버튼
			@Override
			public void onClick(View v) {
				Log.d(TAG,"mainHome1RegsterByQR click");
				runMode = 4;		// QR 대기등록 모드
				home1RegisterWaitTitle.setText(getActivity().getString(R.string.register_by_qr));	
				homeLayout1.setVisibility(View.GONE);
				homeLayout4.setVisibility(View.VISIBLE);
			}
		});
		// 홈4화면  QR 스캔 버튼 리스너
		mainHome4qrScanBtn.setOnClickListener(new OnClickListener() {		// 홈4화면  QR 스캔 버튼 리스너
			@Override
			public void onClick(View v) {
				Log.d(TAG,"mainHome4qrScanBtn click");
				Intent intent = new Intent(getActivity(), com.google.zxing.client.android.CaptureActivity.class);
				intent.setPackage("com.google.zxing.client.android");		 
				try{
					startActivityForResult(intent, 1);
				}catch(Exception e){
					Log.i(TAG, "error occured");
				}
			}
		});

		mainHome2ConfirmBtn.setOnClickListener(new OnClickListener() {		// 홈2. 확인 버튼
			@Override
			public void onClick(View v) {
				Log.d(TAG,"mainHome2ConfirmBtn click");
				// 잘못된 값은 1로 초기화
//				if( Integer.toString(np2.getValue()).length()<1 || np2.getValue()==0 ){
//					np2.setValue(1);
//				}
				if((personNumber2.getText()+"").length()<1 || Integer.parseInt(personNumber2.getText()+"")<1 ){
					personNumber2.setText("1");
				}
				
				inputText = mainHome2UserName.getText()+"";
				if(inputText.length()<1){
					showResultDialog(getString(R.string.input_your_name));
				}else{
					Log.d(TAG,"reg by name");
					showConfirmDialog(2, inputText+""+getString(R.string.get_user_reg_confirm));
				}
			}
		});
		mainHome2CancelBtn.setOnClickListener(new OnClickListener() {		// 홈2. 취소 버튼
			@Override
			public void onClick(View v) {
				Log.d(TAG,"mainHome2CancelBtn click");
				runMode = 1; 	// 홈 모드
				goHomeMain();
				init();			// 이전값 초기화.
			}
		});
		mainHome3ConfirmBtn.setOnClickListener(new OnClickListener() {		// 홈3. 확인 버튼
			@Override
			public void onClick(View v) {
				Log.d(TAG,"mainHome3ConfirmBtn click");
				// 잘못된 값은 1로 초기화
//				if( Integer.toString(np3.getValue()).length()<1 || np3.getValue()==0 ){
//					np3.setValue(1);
//				}
				if((personNumber3.getText()+"").length()<1 || Integer.parseInt(personNumber3.getText()+"")<1 ){
					personNumber3.setText("1");
				}
				
				inputText = mainHome3UserPhonenumber.getText()+"";
				if(inputText.length()<1){
					showResultDialog(getString(R.string.input_your_phone_number));
				}else{
					Log.d(TAG,"reg by phone number");
					showConfirmDialog(2, inputText+""+getString(R.string.get_user_reg_confirm));
				}
			}
		});
		mainHome3CancelBtn.setOnClickListener(new OnClickListener() {		// 홈3. 취소 버튼
			@Override
			public void onClick(View v) {
				Log.d(TAG,"mainHome2CancelBtn click");
				runMode = 1; 	// 홈 모드
				goHomeMain();
				init();			// 이전값 초기화.
			}
		});

		mainHome4ConfirmBtn.setOnClickListener(new OnClickListener() {		// 홈4. 확인 버튼
			@Override
			public void onClick(View v) {
				Log.d(TAG,"mainHome4ConfirmBtn click");
				// 잘못된 값은 1로 초기화
//				if( Integer.toString(np4.getValue()).length()<1 || np4.getValue()==0 ){
//					np4.setValue(1);
//				}
				if((personNumber4.getText()+"").length()<1 || Integer.parseInt(personNumber4.getText()+"")<1 ){
					personNumber4.setText("1");
				}
				
				if(inputText.length()<1){
					showResultDialog(getString(R.string.scan_your_qr_code));
				}else{
					Log.d(TAG,"reg by QR");
					showConfirmDialog(2, inputText+""+getString(R.string.get_user_reg_confirm));
				}
			}
		});
		mainHome4CancelBtn.setOnClickListener(new OnClickListener() {		// 홈4. 취소 버튼
			@Override
			public void onClick(View v) {
				Log.d(TAG,"mainHome4CancelBtn click");
				runMode = 1; 	// 홈 모드
				goHomeMain();
				init();			// 이전값 초기화.
			}
		});

//		// 총 인원수 넘버 픽커
//		np2 = (NumberPicker) findViewById(R.id.np2); 
//		np3 = (NumberPicker) findViewById(R.id.np3); 
//		np4 = (NumberPicker) findViewById(R.id.np4); 
//		np2.setMaxValue(numberPickerMaxValue); 
//		np2.setMinValue(numberPickerMinValue);
//		np3.setMaxValue(numberPickerMaxValue); 
//		np3.setMinValue(numberPickerMinValue);
//		np4.setMaxValue(numberPickerMaxValue); 
//		np4.setMinValue(numberPickerMinValue);

		// 부모 레이아웃 리스너 - 외부 터치 시 키보드 숨김 용도 
		parentLayout = view.findViewById(R.id.main_home_select_reg_type_parent_layout);		
		parentLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				hideKeyboard();
			}
		});
		
		// 현재 대기중인 고객수.
		handler.sendEmptyMessage(GET_WAIT_PERSON_NUMBER);
		
		return view;
	}

	///////////////	자체 메소드	///////////////////////////////////////////////////////////////////////////	
	// QR 스켄 결과 받는 부분
	/**
	 * onActivityResult
	 *   QR 스켄 결과 받아 처리한다
	 *
	 * @param requestCode
	 * @param resultCode
	 * @param intent
	 * @return
	 */
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent intent) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, intent);
		Log.d(TAG,"onActivityResult");
		if(requestCode == 1) {					
			if(resultCode == getActivity().RESULT_OK) {  		// 성공시
				// 잘못된 값은 1로 초기화 
//				if( Integer.toString(np4.getValue()).length()<1 || np4.getValue()==0 ){
//					np4.setValue(1);
//				}
				userID = intent.getStringExtra("SCAN_RESULT");
				Log.d(TAG,"userID::"+userID);			
				if(userID.contains("http")){			// URL로 읽었을 경우. (아이폰에서 생성한 QR)
					userID = userID.substring(7);			// 앞의 http:// 을 자른다. (7글자)
					Log.d(TAG,"userID::"+userID);
				}
				inputText = userID;
				if(inputText.length()>0){
					setInputTextToScanButton();		// 고객 QR 코드를 버튼에 넣어버린다.
				}
			} else if(resultCode == getActivity().RESULT_CANCELED) {
				// 취소 또는 실패시 이전화면으로.
				Log.d(TAG,"canceled");
			}
		}
	}
	// 화면에 있는 고객 정보 초기화. 
	/**
	 * init
	 *  화면에 있는 고객 정보 초기화한다.
	 *
	 * @param 
	 * @param
	 * @return
	 */
	public void init(){
		if(getActivity()!=null){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("init", 1);
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
		
	}

	/**
	 * setInputTextToScanButton
	 *  고객 QR 코드를 버튼에 넣어버린다.
	 *
	 * @param 
	 * @param
	 * @return
	 */
	public void setInputTextToScanButton(){
		if(getActivity()!=null){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("setInputTextToScanButton", 1);
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
		
	}

	/**
	 * goHomeMain
	 *  홈1 로 이동한다.
	 *
	 * @param 
	 * @param
	 * @return
	 */
	public void goHomeMain(){		// 홈으로
		if(getActivity()!=null){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("goHomeMain", 1);
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}

	////////////////////////////////////////////////////////////////////////////////////////////////

	/**
	 * 러너블. 대기 인원 수를 가져온다.
	 */
	class RunnableGetWaitPersonNumber implements Runnable {
		public void run(){
			new backgroundThreadGetWaitPersonNumber().execute();
		}
	}
	/**
	 * backgroundThreadGetWaitPersonNumber
	 * 비동기 스레드  대기 인원 수를 가져온다.
	 * @author blue
	 *
	 */
	public class backgroundThreadGetWaitPersonNumber extends AsyncTask<Void, Void, Void>{
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundThreadGetWaitPersonNumber");
			
			// 파라미터 세팅
			WaitingNumberStore waitingNumberStore = new WaitingNumberStore();
			waitingNumberStore.setMerchantId(merchantId);
			
			// 서버 메소드 호출
			if(FragmentHome.restCallCntUp()){
				if(!isFinished){
					showPb();
					callResult = waitnumberStoreMRest.RestGetWaitPersonNumber(waitingNumberStore);
					// 결과 처리
					if(!(callResult.equals("F"))){
						try {
							// 데이터 세팅부..
							jsonObject = new JSONObject(callResult);
							try{
								waitPersonNumber = jsonObject.getString("totalCount");
								if(waitPersonNumber==null || waitPersonNumber.equals("null") || waitPersonNumber.length()<1){
									waitPersonNumber = "0";
								}
							}catch(Exception e){
								e.printStackTrace();
								waitPersonNumber = "0";
							}
							showWaitNum();
						} catch (JSONException e) {
							e.printStackTrace();
						} 
					}
					hidePb();
				}
				FragmentHome.restCallCntDown();
			}
			return null; 
		}
	}
	
	

//	private void threadSelectDuplicationUser() {
//		Log.d(TAG, "threadSelectDuplicationUser");
//		Thread thread = new Thread(new Runnable() {
//			public void run() {
//				selectDuplicationUser();
//			}
//		});
//		thread.start();
//	}
//	private void selectDuplicationUser() {
//		Log.d(TAG, "selectDuplicationUser");
//		// 파라미터 세팅
//		WaitingNumberStore waitingNumberStore = new WaitingNumberStore();
//		WaitingUser waitingUser = new WaitingUser();
//		waitingNumberStore.setMerchantId(merchantId);	
//		waitingUser.setInputText(inputText);
//		// 서버 메소드 호출
//		if(FragmentHome.restCallCntUp()){
//			showPb();
//			if(!isFinished){
//				callResult = waitnumberStoreMRest.RestSelectDuplicationUser(runMode, waitingNumberStore, waitingUser);
//				// 결과 처리
//				if(callResult.equals("0")){
//					Log.d(TAG,"it can be registered");
//					// 대기 목록 가져온다.
//					handler.sendEmptyMessage(GET_WAIT_LIST);
//				}else if(callResult.equals("1")){
//					Log.d(TAG,"already registered");
//					hidePb();
//					showResultDialog(getString(R.string.already_registered));
//				}else{
//					Log.d(TAG,"failed");
//					hidePb();
//					showResultDialog(getString(R.string.error_message));
//				}
//			}
//			hidePb();
//			FragmentHome.restCallCntDown();
//		}
//	}
	/**
	 * 러너블. 중복 체크
	 */
	class RunnableSelectDuplicationUser implements Runnable {
		public void run(){
			new backgroundThreadSelectDuplicationUser().execute();	
		}
	}
	/**
	 * backgroundThreadSelectDuplicationUser
	 * 비동기    중복 체크
	 * @author blue
	 *
	 */
	public class backgroundThreadSelectDuplicationUser extends AsyncTask<Void, Void, Void>{
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundThreadSelectDuplicationUser");

			// 파라미터 세팅
			WaitingNumberStore waitingNumberStore = new WaitingNumberStore();
			WaitingUser waitingUser = new WaitingUser();
			waitingNumberStore.setMerchantId(merchantId);	
			waitingUser.setInputText(inputText);

			// 서버 메소드 호출
			showPb();
			callResult = waitnumberStoreMRest.RestSelectDuplicationUser(runMode, waitingNumberStore, waitingUser);
			hidePb();

			// 결과 처리
			if(callResult.equals("0")){
				Log.d(TAG,"it can be registered");
				// 대기 목록 가져온다.
				handler.sendEmptyMessage(GET_WAIT_LIST);
			}else if(callResult.equals("1")){
				Log.d(TAG,"already registered");
				hidePb();
				showResultDialog(getString(R.string.already_registered));
			}else{
				Log.d(TAG,"failed");
				hidePb();
				showResultDialog(getString(R.string.error_message));
			}
			return null; 
		}
	}

	/**
	 * 러너블. 대기 목록을 가져온다.
	 */
	class RunnableGetWaitList implements Runnable {
		public void run(){
			new backgroundThreadGetWaitList().execute();	
		}
	}
	/**
	 * backgroundThreadGetWaitList
	 * 비동기  .  대기 목록을 가져온다.
	 * @author blue
	 *
	 */
	public class backgroundThreadGetWaitList extends AsyncTask<Void, Void, Void>{
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundThreadGetWaitList");

			// 파라미터 세팅
			WaitingNumberStore waitingNumberStore = new WaitingNumberStore();
			waitingNumberStore.setMerchantId(merchantId);	
			
			// 서버 메소드 호출
			if(FragmentHome.restCallCntUp()){
				showPb();
				if(!isFinished){
					callResult = waitnumberStoreMRest.RestGetWaitList(waitingNumberStore);// 결과 처리
					// 결과 처리		
					if(!(callResult.equals("F"))){
						try {
							// 데이터 세팅부..
							JSONArray jsonArray = null;
							jsonArray = new JSONArray(callResult);
							max = jsonArray.length();
							totalCount = Integer.toString(max);
							Log.d(TAG,"totalCount::"+totalCount);
							// 통합 대기 등록
							handler.sendEmptyMessage(REG_USER);
						} catch (JSONException e) {
							hidePb();
							e.printStackTrace();
						} 
					}
				}
				hidePb();
				FragmentHome.restCallCntDown();
			}
			
			
			return null; 
		}
	}

	
	/**
	 * 러너블. 대기등록 통합
	 */
	class RunnableRegUser implements Runnable {
		public void run(){
			new backgroundThreadRegUser().execute();	
		}
	}
	/**
	 * backgroundThreadReg
	 * 비동기    대기등록 통합
	 * @author blue
	 *
	 */
	public class backgroundThreadRegUser extends AsyncTask<Void, Void, Void>{
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundThreadRegUser");

			// 파라미터 세팅
			WaitingUser waitingUser = new WaitingUser();
			WaitingNumberStore waitingNumberStore = new WaitingNumberStore();
			waitingNumberStore.setMerchantId(merchantId);	
			waitingUser.setInputText(inputText);
//			if(runMode==2){			// 이름 모드
//				waitingUser.setCompanion(np2.getValue()+"");	// 동행인 숫자.
//			}else if(runMode==3){	// 전번 모드
//				waitingUser.setCompanion(np3.getValue()+"");	// 동행인 숫자.
//			}else if(runMode==4){	// QR 모드
//				waitingUser.setCompanion(np4.getValue()+"");	// 동행인 숫자.
//			}
			if(runMode==2){			// 이름 모드
				waitingUser.setCompanion(personNumber2.getText()+"");	// 동행인 숫자.
			}else if(runMode==3){	// 전번 모드
				waitingUser.setCompanion(personNumber3.getText()+"");	// 동행인 숫자.
			}else if(runMode==4){	// QR 모드
				waitingUser.setCompanion(personNumber4.getText()+"");	// 동행인 숫자.
			}

			// 서버 메소드 호출
			if(FragmentHome.restCallCntUp()){
				showPb();
				if(!isFinished){
					callResult = waitnumberStoreMRest.RestRegUser(runMode, totalCount, waitingNumberStore, waitingUser);
					// 결과 처리
					if(callResult.equals("fail")||callResult.equals("FAIL")){
						Log.d(TAG,"FAIL");
						hidePb();
						showResultDialog(getString(R.string.wait_register_fail));
					}else{
						Log.d(TAG,"SUCCESS");
						showResultDialogAndFinish(getString(R.string.wait_register_success));	// 사용자 확인 후 닫기
					}
				}
				hidePb();
				FragmentHome.restCallCntDown();
			}
			return null; 
		}
	}

	//////////////////////////	Util	/////////////////////////////////////////////////////////////////////		

	/**
	 * 화면에 대기중인 고객 숫자를 보여준다.
	 * showWaitNum
	 */
	public void showWaitNum(){
		if(getActivity()!=null){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("showWaitNum", 1);
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}
	
	/**
	 * returnThis
	 * 컨택스트를 리턴한다
	 *
	 * @param 
	 * @param 
	 * @return this
	 */
	public Context returnThis(){
		return getActivity();
	}
	
	public Boolean checkFinishYn(){
		Boolean returnVal ;
		if(runMode==1){
			returnVal = true;
		}else{
			// 초기화
			runMode = 1; 	// 홈 모드
			goHomeMain();
			init();			// 이전값 초기화.
			returnVal = false;
		}
		return returnVal;
	}

//	// 백버튼으로 이전 메뉴로 이동.
//	@Override
//	public void onBackPressed() {
//		if(runMode==1){
//
//			//닫기 버튼 2번 누르면 종료 한다
//			if(app_end == 1){
//				finish();
//			}else{
//				app_end = 1;
//				Toast.makeText(MainHomeSelectRegTypeActivity.this, R.string.noti_back_finish, Toast.LENGTH_SHORT).show();
//				new Thread( 
//						new Runnable(){
//							public void run(){
//								try {
//									Thread.sleep(3000);
//									app_end = 0;
//								} catch (InterruptedException e) {e.printStackTrace();}
//							}
//						}
//				).start();
//			}
//		}else{	// 뒤로가기 버튼으로 등록 메인 메뉴로 돌아가기.	
//			goHomeMain();
//			init();			// 이전값 초기화.
//			runMode = 1; 	// 홈 모드
//			hideKeyboard();
//		}
//	}

	// 키보드 숨김
	/**
	 * hideKeyboard
	 *  키보드 숨긴다.
	 *
	 * @param 
	 * @param
	 * @return 
	 */
	public void hideKeyboard(){
		imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE );
		imm .hideSoftInputFromWindow(mainHome2UserName.getWindowToken(), 0);
	}


	/**
	 * showResultDialog
	 *  얼럿 띄운다
	 *
	 * @param msg
	 * @param
	 * @return 
	 */
	public void showResultDialog(final String msg){
		if(getActivity()!=null){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("showAlert", 1);
					b.putString("msg", msg);			// 화면에 보여줄 메시지
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
		
	}
	/**
	 * showResultDialogAndFinish
	 *  얼럿 띄우고 화면을 닫는다. -> 대기등록 성공했을 경우. -> +대기 등록 숫자 다시 조회
	 *
	 * @param msg
	 * @param
	 * @return 
	 */
	public void showResultDialogAndFinish(final String msg){
		if(getActivity()!=null){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("showAlert", 9);
					b.putString("msg", msg);			// 화면에 보여줄 메시지
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
		
	}

	/**
	 * showConfirmDialog
	 *  확인을 받는 컨펌 창을 띄운다
	 *
	 * @param showConfirmCode
	 * @param msg
	 * @return 
	 */
	public void showConfirmDialog(final int showConfirmCode, final String msg){
		if(getActivity()!=null){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("showConfirm", showConfirmCode);		// 2는 이름으로 등록, 3은 전번으로 등록
					b.putString("msg", msg);			// 화면에 보여줄 메시지
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
		
	}

	// 중앙 프로그래스바 보임, 숨김
	/**
	 * showPb
	 *  중앙 프로그래스바 가시화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void showPb(){
		if(getActivity()!=null){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler .obtainMessage();
					Bundle b = new Bundle();
					b.putInt( "order" , 1);
					message.setData(b);
					handler .sendMessage(message);
				}
			});
		}
		
	}
	/**
	 * hidePb
	 *  중앙 프로그래스바 비가시화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void hidePb(){
		if(getActivity()!=null){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler .obtainMessage();
					Bundle b = new Bundle();
					b.putInt( "order" , 2);
					message.setData(b);
					handler .sendMessage(message);
				}
			});
		}
		
	}


	/**
	 * onResume
	 *  액티비티 리쥼시 닫기 카운터초기화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	@Override
	public void onResume(){
		super.onResume();
		isFinished = false;
		FragmentHome.app_end = 0;
	}
	@Override
	public void onPause(){
		super.onPause();
		isFinished = true;
	}
}
